题目链接
给定一列数 a1,a2,⋯,an,定义 f(l,r) 为连续子序列 al,al+1,⋯,ar 中元素值的种类数,求 ∑i=1n∑j=inf(i,j)。
特殊的数据范围:1≤ai≤n≤2×105。
利用好 ai≤n 的条件,转化题意。
一种转化方式如下:定义 P(x) 为包含 x 的连续子序列数量,则题目所求即为 ∑i=1nP(i)。
我们按照提示二转化题意。注意到 ai≤n 的特殊条件,f(l,r) 可以自然转换为在形如 “i∈[1,n] 出现在 al,al+1,⋯,ar" 的 n 个条件中满足的数量,因此该转化是正确的。
接下来的任务就是如何快速计数 P(x),考虑正难则反,计算不包含 x 的子序列数量。考虑将数列中 x 的出现作为分割符分割序列,对于每个不含 x 的长 li 的子序列,其对答案的贡献为 li(li+1)2,求和后用其减去 n(n+1)2 即为答案。依据均摊分析,可以证明对于所有的 i 该过程可以在 O(n) 的时间复杂度内完成所有计算。
见提交记录。
见到特殊条件还是不太会用。